#!/bin/bash

# 存存的小屋 v2.0 - 自动化部署脚本
# 用于在1Panel中快速部署项目

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

log_step() {
    echo -e "${PURPLE}[STEP]${NC} $1"
}

# 检查命令是否存在
check_command() {
    if ! command -v $1 &> /dev/null; then
        log_error "$1 未安装，请先安装 $1"
        exit 1
    fi
}

# 检查服务状态
check_service() {
    if systemctl is-active --quiet $1; then
        log_success "$1 服务运行正常"
    else
        log_error "$1 服务未运行，请启动 $1 服务"
        exit 1
    fi
}

# 主函数
main() {
    echo -e "${CYAN}"
    echo "🌸 存存的小屋 v2.0 自动化部署脚本"
    echo "=================================="
    echo -e "${NC}"

    # 检查环境
    log_step "检查运行环境..."
    check_command node
    check_command npm
    check_command git
    check_service mysql
    check_service nginx

    # 获取项目路径
    PROJECT_PATH="/www/wwwroot/yangcun.icu"
    if [ ! -d "$PROJECT_PATH" ]; then
        log_error "项目目录不存在: $PROJECT_PATH"
        exit 1
    fi

    cd "$PROJECT_PATH"

    # 备份当前版本
    log_step "备份当前版本..."
    if [ -d "backup" ]; then
        rm -rf backup
    fi
    mkdir -p backup
    cp -r . backup/$(date +%Y%m%d_%H%M%S) 2>/dev/null || true

    # 拉取最新代码
    log_step "拉取最新代码..."
    if [ -d ".git" ]; then
        git pull origin main
    else
        log_warning "未找到Git仓库，跳过代码更新"
    fi

    # 安装后端依赖
    log_step "安装后端依赖..."
    cd backend
    if [ ! -f "package.json" ]; then
        log_error "后端package.json文件不存在"
        exit 1
    fi

    npm install --production

    # 检查环境配置
    if [ ! -f ".env" ]; then
        log_warning "未找到.env文件，复制示例配置..."
        if [ -f "env.example" ]; then
            cp env.example .env
            log_warning "请编辑 .env 文件配置数据库连接信息"
        else
            log_error "未找到env.example文件"
            exit 1
        fi
    fi

    # 创建上传目录
    mkdir -p uploads
    chmod 755 uploads

    # 创建日志目录
    mkdir -p logs
    chmod 755 logs

    # 重启后端服务
    log_step "重启后端服务..."
    if pm2 list | grep -q "yangcun-api"; then
        pm2 restart yangcun-api
    else
        pm2 start src/app.js --name yangcun-api
    fi

    pm2 save

    # 构建前端
    log_step "构建前端项目..."
    cd ../frontend
    if [ ! -f "package.json" ]; then
        log_error "前端package.json文件不存在"
        exit 1
    fi

    npm install
    npm run build

    # 设置文件权限
    log_step "设置文件权限..."
    cd ..
    chown -R www-data:www-data .
    chmod -R 755 .
    chmod 600 backend/.env

    # 检查服务状态
    log_step "检查服务状态..."
    sleep 3
    if pm2 list | grep -q "yangcun-api.*online"; then
        log_success "后端服务启动成功"
    else
        log_error "后端服务启动失败"
        pm2 logs yangcun-api --lines 10
        exit 1
    fi

    # 测试API
    log_step "测试API接口..."
    if curl -s http://localhost:3001/api/health | grep -q "ok"; then
        log_success "API接口测试通过"
    else
        log_warning "API接口测试失败，请检查服务状态"
    fi

    # 清理缓存
    log_step "清理缓存..."
    npm cache clean --force 2>/dev/null || true

    echo ""
    log_success "部署完成！"
    echo ""
    echo -e "${CYAN}📍 访问地址：${NC}"
    echo "   前台: https://yangcun.icu"
    echo "   后台: https://yangcun.icu/admin"
    echo ""
    echo -e "${CYAN}🔧 管理命令：${NC}"
    echo "   查看日志: pm2 logs yangcun-api"
    echo "   重启服务: pm2 restart yangcun-api"
    echo "   停止服务: pm2 stop yangcun-api"
    echo ""
    echo -e "${CYAN}🔑 默认管理员账户：${NC}"
    echo "   用户名: yangcun"
    echo "   密码: yyc20060321@"
    echo ""
    echo -e "${YELLOW}⚠️  请及时修改默认密码！${NC}"
    echo ""
    echo -e "${GREEN}🌸 存存的小屋部署完成，祝您使用愉快！${NC}"
}

# 错误处理
trap 'log_error "部署过程中发生错误，请检查日志"; exit 1' ERR

# 运行主函数
main "$@" 